aardio 文档
aardio 范例: 调用 VBA/JSA 操作 Excel
//aardio 调用 VBA/JSA 操作 Excel
import console.int;
import com.excel;
var xl;
try{
//打开或创建 Excel 文件,xlsm 格式支持宏( VBA / JSA )。
xl = com.excel("/vba.xlsm");
}
catch(e){
console.error(e)
if(::Kernel32.GetACP()===65001){
console.log("注意 VBA 不支持 UTF-8 。
如果系统系统了 UTF-8 内码(区域设置 » Beta 版:使用 Unicode UTF-8 提供全球多语言支持)。
则打开 xlsm 的代码会报错“Open 方法不可用”,Excel 自己也无法打开 VBA(会提示损坏,修复就会删除 VBA 代码) 。")
}
}
//自由调用 VBA / JSA 函数,不需要确认启用宏。
var data = xl.vba.GetSheetData();//先用 VBA 编写函数,宏管理器能看到函数名。
/*
自动支持 VBA 数组,不需要任何其他封装。
数组是值类型,操作数组不用再返回 VBA 进程,相对来说简单高效。
*/
console.dumpJson(data);
/*
VBA 也可以自由调用 aardio 对象。
所有 aardio 对象都支持 VBA 迭代For Each … Next 语句。
在 VBA 可以调用 aardio 对象的属性、函数。
但 VBA 动态读写属性要这样写:
CallByName (aardioObject, "读取属性名", vbGet)
CallByName aardioObject, "写入属性名", VbSet, "属性值"
*/
xl.vba.CallAnything({
//在 Excel 或 WPS 表格中按 ALT + F11 打开代码窗口。
//VBA 编辑器会自动将某些函数名转为大写,aardio 是区分大小写的。
Log = function(str){
console.log("VBA调用任意 aardio 函数,参数:",str);
//owner 表示当前拥有 Log 函数的对象自身
console.log(owner.Name)
};
Name = "aardio";
});
/***
VBA,JSA 源码可打开 /vba.xlsm 查看代码。
JSA 调用 aardio 对象的成员函数要这样写:
aardioObject.Invoke("Log","这是来自 JSA 的参数。");
而 VBA 可以直接写 aardioObject.Log("这是来自 JSA 的参数。")
JSA 里读写 aardio 对象属性
aardioObject.Invoke_Get("属性名");
aardioObject.Invoke_Set("属性名","属性值");
另外 aardio 里可以用
JSON.stringify( value ) 将对象转换为 JSON。
也可以用 JSON.parse( json ) 方便地解析 JSON 为对象。
而 JS 使用 JSON.stringify( value ) 生成 JSON。
使用 JSON.parse 解析 JSON。
使用 JSON 交互数据也是很方便的。
在 aardio 里调用 JSA 代码中可以可以插入 debugger; 语句。
WPS 遇到 debugger; 会自动跳出调试工具。
***/
/***
VBA 源码
Function GetSheetData() As Variant
Dim dataArr As Variant
Dim lastRow As Long
Dim lastCol As Long
Dim rng As Range
Dim i As Long, j As Long
' 寻找最后一个被使用的行和列
lastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
lastCol = Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
' 设置范围
Set rng = Range(Cells(1, 1), Cells(lastRow, lastCol))
' 将数据值存入数组
dataArr = rng.Value
' 返回数组
GetSheetData = dataArr
End Function
' VBA 可以直接调用 aardio 的任意对象任意函数。
Public Sub CallAnything(ByVal aardioObject As Object)
' 修改对象的属性
aardioObject.Name = "Office"
' 调用对象的函数
aardioObject.Log ("这是来自 VBA 的参数。")
'如果对象就是函数,也可以如下直接调用
'aardioObject ("其他调用参数。")
End Sub
***/
/***
JSA 源码
function GetSheetData() {
var dataArr = [];
var lastRow, lastCol;
var rng;
var i, j;
// 寻找最后一个被使用的行和列
lastRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row;
lastCol = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column;
// 设置范围
rng = ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(lastRow, lastCol));
// 将数据值存入数组
dataArr = rng.Value();
return dataArr;
}
function CallAnything(aardioObject) {
//debugger; //运行时打开调试,非常方便
//读取 aardio 对象的值,参数 @1 为要读取的字段名
var name = aardioObject.Invoke_Get("Name");
//修改 aardio 对象的值,参数 @1 为要修改的字段名
aardioObject.Invoke_Set("Name","WPS");
//调用 aardio 函数,参数 @1 为函数名,后面为其他调用参数。
aardioObject.Invoke("Log","这是来自 JSA 的参数。");
//如果 aardioObject 是函数对象,则可以直接调用
//aardioObject("其他调用参数");
}
***/
Markdown 格式